package com.diaohw.module.system.obj.tables;

import com.diaohw.platform.framework.db.flex.obj.tables.BaseTableDef;
import com.mybatisflex.core.query.QueryColumn;

import java.io.Serial;

/**
 * 菜单管理 表定义层。
 *
 * @author D-Hw
 * @since 2025-07-29 16:55:25
 */
public class SysMenuDef extends BaseTableDef {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 菜单管理
     */
    public static final SysMenuDef SYS_MENU = new SysMenuDef();

    /**
     * 菜单图标
     */
    public final QueryColumn ICON = new QueryColumn(this, "ICON");

    /**
     * 菜单名称
     */
    public final QueryColumn NAME = new QueryColumn(this, "NAME");

    /**
     * 【按钮】权限标识
     */
    public final QueryColumn PERM = new QueryColumn(this, "PERM");

    /**
     * 排序
     */
    public final QueryColumn SORT = new QueryColumn(this, "SORT");

    /**
     * 菜单类型（1-菜单 2-目录 3-外链 ）
     */
    public final QueryColumn TYPE = new QueryColumn(this, "TYPE");

    /**
     * 系统模块
     */
    public final QueryColumn MODULE = new QueryColumn(this, "MODULE_");

    /**
     * 路由参数
     */
    public final QueryColumn PARAMS = new QueryColumn(this, "PARAMS");

    /**
     * 显示状态（1-显示 0-隐藏）
     */
    public final QueryColumn VISIBLE = new QueryColumn(this, "VISIBLE");

    /**
     * 父菜单ID
     */
    public final QueryColumn PARENT_ID = new QueryColumn(this, "PARENT_ID");

    /**
     * 跳转路径
     */
    public final QueryColumn REDIRECT = new QueryColumn(this, "REDIRECT");

    /**
     * 父节点ID路径
     */
    public final QueryColumn TREE_PATH = new QueryColumn(this, "TREE_PATH");

    /**
     * 组件路径（组件页面完整路径，相对于 src/views/，缺省后缀 .vue）
     */
    public final QueryColumn COMPONENT = new QueryColumn(this, "COMPONENT");

    /**
     * 【菜单】是否开启页面缓存（1-是 0-否）
     */
    public final QueryColumn KEEP_ALIVE = new QueryColumn(this, "KEEP_ALIVE");

    /**
     * 路由名称（Vue Router 中用于命名路由）
     */
    public final QueryColumn ROUTE_NAME = new QueryColumn(this, "ROUTE_NAME");

    /**
     * 路由路径（Vue Router 中定义的 URL 路径）
     */
    public final QueryColumn ROUTE_PATH = new QueryColumn(this, "ROUTE_PATH");

    /**
     * 【目录】只有一个子路由是否始终显示（1-是 0-否）
     */
    public final QueryColumn ALWAYS_SHOW = new QueryColumn(this, "ALWAYS_SHOW");


    /**
     * 默认字段，不包含逻辑删除或者 large 等字段。
     */
    public final QueryColumn[] DEFAULT_COLUMNS = new QueryColumn[]{MODULE, PARENT_ID, TREE_PATH, NAME, TYPE, ROUTE_NAME, ROUTE_PATH, COMPONENT, PERM, ALWAYS_SHOW, KEEP_ALIVE, VISIBLE, SORT, ICON, REDIRECT, PARAMS};

    public SysMenuDef() {
        super("", "SYS_MENU");
    }

    private SysMenuDef(String schema, String name, String alisa) {
        super(schema, name, alisa);
    }

    public SysMenuDef as(String alias) {
        String key = getNameWithSchema() + "." + alias;
        return getCache(key, k -> new SysMenuDef("", "SYS_MENU", alias));
    }

}
